package com.naiterui.ehp.bs.im.network.transcode;

import com.naiterui.ehp.bs.im.exception.NaiteruiIMException;
import com.naiterui.ehp.bs.im.network.protocl.Message;

/**
 * 定义消息编码与解码的相关方法
 * 目前采用的文本协议使用JSON作为数据格式
 * 通过该接口可以对上层调用屏蔽掉具体的编解码方式
 * 可以更换不同JSON解析器，也可以在后期为提升性能将
 * 协议更换为ProtoclBuffer
 * <P>File name : IMessageTransCoder.java </P>
 * <P>Author : zhouyanxin </P>
 * <P>Date : 2015年6月22日 </P>
 */
public interface IMessageTransCoder {

    /**
     * 消息解码
     * 用于将从客户端传递来的消息转换为指定消息类型对应的对象
     * 转换完成后会对消息的完整性和正确性进行检测
     * IMessageTransCoder.decodeMessage()<BR>
     * <P>Author : zhouyanxin </P>
     * <P>Date : 2015年6月22日 </P>
     * @param message
     * @return
     * @throws NaiteruiIMException
     */
    Message<?> decodeMessage(String message) throws NaiteruiIMException;

    /**
     * 消息编码
     * 用于将内存中数据对象转换为用户传输指定格式的数据
     * 目前采用的JSON数据格式
     * IMessageTransCoder.encodeMessage()<BR>
     * <P>Author : zhouyanxin </P>
     * <P>Date : 2015年6月23日 </P>
     * @param message
     * @return
     * @throws NaiteruiIMException
     */
    String encodeMessage(Message<?> message) throws NaiteruiIMException;
}
